﻿/************************************************************************

   Extended Silverlight Toolkit

   Copyright (C) 2010-2012 Xceed Software Inc.

   This program is provided to you under the terms of the Microsoft Public
   License (Ms-PL) as published at http://extendedsilverlight.codeplex.com/license

   Please purchase a commercial version of this toolkit if you are using
   it in a commercial product. The commercial versions support the project,
   and also include more features for each control, priority support,
   source code, updates, removed watermark, and a proprietary license.

   Visit http://xceed.com and follow @datagrid on Twitter.

  **********************************************************************/

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace Xceed.Silverlight.Data
{
  internal class DependentPosition<T> : SourcePosition
  {

    public DependentPosition(T dependentItem, Func<T,SourcePosition> positionResolver )
    {
      if(dependentItem == null)
        throw new ArgumentNullException( "dependentItem" );

      if( object.Equals(dependentItem, default(T)) )
        throw new ArgumentException( "The specified dependentItem cannot be the default value.", "dependentItem" );

      if( positionResolver == null )
        throw new ArgumentNullException( "positionResolver" );

      this.DependentItem = dependentItem;

      this.PositionResolver = positionResolver;
    }

    public T DependentItem
    {
      get;
      private set;
    }

    public Func<T, SourcePosition> PositionResolver
    {
      get;
      private set;
    }

#if DEBUG
    public override string ToString()
    {
      return string.Format( "DependentPosition(item={0}, resolver is {1}", 
        this.DependentItem, 
        ( this.PositionResolver != null ) ? "not null" : "null" );
    }
#endif  //DEBUG

  }
}
